package main
import (
"bytes"
"encoding/json"
"fmt"
"github.com/fatih/color"
"io/ioutil"
"log"
"net/http"
"time"
"golang.org/x/net/http2"
"golang.org/x/net/http2/h2c"
)
func handler(w http.ResponseWriter, r *http.Request) {
// 确保请求方法是 POST
if r.Method != http.MethodPost {
http.Error(w, "Invalid request method", http.StatusMethodNotAllowed)
return
}
// 读取请求体
body, err := ioutil.ReadAll(r.Body)
if err != nil {
http.Error(w, "Failed to read request body", http.StatusBadRequest)
return
}
defer r.Body.Close()
var out bytes.Buffer
// 使用 json.Indent 进行格式化(控制台格式化)
if err := json.Indent(&out, []byte(body), "", " "); err != nil {
fmt.Println("Error formatting JSON:", err)
return
}
// 打印请求体,使用 color 库为 JSON 添加颜色
color.Cyan("=================" + time.Now().Format("2006-01-02 15:04:05") + "=================")
color.Green(out.String())
// 返回响应
w.WriteHeader(http.StatusOK)
w.Write([]byte("Request received"))
}
func service() {
// 创建一个 HTTP 处理器
mux := http.NewServeMux()
mux.HandleFunc("/", handler)
// 使用 h2c 包装处理器以支持 HTTP/2
h2s := &http2.Server{}
server := &http.Server{
Addr: ":8080",
Handler: h2c.NewHandler(mux, h2s), // 使用 h2c 支持 HTTP/2
}
// 配置 HTTP/2 支持
http2.ConfigureServer(server, h2s)
// 启动服务器
log.Println("Starting HTTP/2 (h2c) server on :8080")
if err := server.ListenAndServe(); err != nil {
log.Fatalf("Failed to start server: %v", err)
}
}
共有 0 - golang 简易打印请求服务端